﻿using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;

namespace FTP
{
    public class FileInfomation
    {
        /// <summary>
        /// 判断该目录信息，是否为文件夹
        /// 文件夹，文件处理方式不同
        /// </summary>
        public bool IsFolder;

        /// <summary>
        /// 文件大小
        /// </summary>
        public long Size { get; }
        /// <summary>
        /// 文件名称
        /// </summary>
        public string FileName { get; }
        /// <summary>
        /// 文件/文件夹 最后修改时间， 根据LIST传回的格式，一共有两类
        /// </summary>
        public string ModifiedAt { get; }


        //构造函数，获取文件基本信息
        //LIST 返回的格式，有两种类型
        //1. -rw-r--r-- 1 ftp ftp             12 Jul 28 16:08 测试中文文件2.txt
        //   file/folder 权限 拥有者 组   文件大小 月  日 时间  文件名称
        //2. drwxr-xr-x 1 ftp ftp              0 Apr 09  2019 testFolder
        //   file/folder 权限 拥有者 组  文件夹大小 月 日 年份  文件夹名称
        //本程序中主要使用属性： 文件/文件夹标识 大小 最后修改时间 名称
        //09-05-24  04:24PM                71680 20230722��ӡ���뷿����ӡ����������ͳ��.xls
        public FileInfomation(string line)
        {

           
        }
      
        public void GetFtpDirectoryContents(string ftpServer, string username, string password, string folderPath)
        {
            {
                FtpWebRequest request = (FtpWebRequest)WebRequest.Create(ftpServer + folderPath);
                request.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
                request.Credentials = new NetworkCredential(username, password);

                try
                {
                    using (FtpWebResponse response = (FtpWebResponse)request.GetResponse())
                    using (StreamReader reader = new StreamReader(response.GetResponseStream()))
                    {
                        string line;
                        while ((line = reader.ReadLine()) != null)
                        {
                            ParseFtpLine(line);
                        }
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine($"错误: {ex.Message}");
                }
            }
        }
        private void ParseFtpLine(string line)
        {
            var regex = new Regex(@"(?<permissions>\S+)\s+(?<owner>\S+)\s+(?<group>\S+)\s+(?<size>\d+)\s+(?<month>\S+)\s+(?<day>\S+)\s+(?<time>\S+|\d{4})\s+(?<name>.+)");
            var match = regex.Match(line);
            if (match.Success)
            {
                string permissions = match.Groups["permissions"].Value;
                string name = match.Groups["name"].Value;
                long size = long.Parse(match.Groups["size"].Value);
                string dateTimeString = $"{match.Groups["month"].Value} {match.Groups["day"].Value} {match.Groups["time"].Value}";

            }
        }

        // 将LIST传回时间信息格式化
        private string toDataTime(string a, string b)
        {
            // 将输入的日期和时间字符串组合
            string dateTimeString = $"{a} {b}";

            // 尝试解析为 DateTime
            DateTime curTime;
            if (DateTime.TryParse(dateTimeString, out curTime))
            {
                // 转换为本地时间
                curTime = curTime.ToLocalTime();
                // 格式化为所需的字符串格式
                return curTime.ToString("yyyy/M/d hh:mm tt");
            }
            else
            {
                // 解析失败时返回一个默认字符串或抛出异常
                return "Invalid DateTime format";
            }
        }
    }
}
